C++ 标准库
<cmath>
C++ 标准库提供了丰富的功能,其中
<cmath>
是一个包含数学函数的头文件,它提供了许多基本的数学运算和常数。
<cmath>
是 C++ 标准库中的一个头文件,它定义了一组数学函数,这些函数可以执行基本的数学运算,如幂运算、三角函数、对数、绝对值等。
要使用
<cmath>
中的函数,你需要在你的 C++ 程序中包含这个头文件:
#include <cmath>
常用函数
<cmath>
提供了许多数学函数,以下是一些常用的函数。
1. 基本数学函数
| 函数 | 功能 | 示例 |
|---|---|---|
abs(x)
|
计算整数
x
的绝对值
|
abs(-5) // 5
|
fabs(x)
|
计算浮点数
x
的绝对值
|
fabs(-5.5) // 5.5
|
fmod(x, y)
|
计算
x
除以
y
的余数
|
fmod(5.3, 2) // 1.3
|
remainder(x, y)
|
计算
x
除以
y
的余数
|
remainder(5.5, 2) // 1.5
|
fmax(x, y)
|
返回
x
和
y
中的较大值
|
fmax(3.5, 4.2) // 4.2
|
fmin(x, y)
|
返回
x
和
y
中的较小值
|
fmin(3.5, 4.2) // 3.5
|
hypot(x, y)
|
计算
sqrt(x*x + y*y)
|
hypot(3, 4) // 5
|
2. 指数和对数函数
| 函数 | 功能 | 示例 |
|---|---|---|
exp(x)
|
计算
e^x
,
e
为自然对数的底数
|
exp(1) // 2.71828...
|
log(x)
|
计算
x
的自然对数
|
log(2.71828) // 1
|
log10(x)
|
计算
x
的以 10 为底的对数
|
log10(100) // 2
|
pow(x, y)
|
计算
x
的
y
次方
|
pow(2, 3) // 8
|
sqrt(x)
|
计算
x
的平方根
|
sqrt(16) // 4
|
cbrt(x)
|
计算
x
的立方根
|
cbrt(27) // 3
|
expm1(x)
|
计算
e^x - 1
|
expm1(1) // 1.71828...
|
log1p(x)
|
计算
log(1 + x)
,适用于 x 接近 0 的情况
|
log1p(0.00001) // 0.00001
|
3. 三角函数
| 函数 | 功能 | 示例 |
|---|---|---|
sin(x)
|
计算
x
的正弦值,
x
以弧度为单位
|
sin(3.14159 / 2) // 1
|
cos(x)
|
计算
x
的余弦值,
x
以弧度为单位
|
cos(3.14159) // -1
|
tan(x)
|
计算
x
的正切值,
x
以弧度为单位
|
tan(0) // 0
|
asin(x)
|
计算
x
的反正弦值,返回弧度
|
asin(1) // 3.14159/2
|
acos(x)
|
计算
x
的反余弦值,返回弧度
|
acos(-1) // 3.14159
|
atan(x)
|
计算
x
的反正切值,返回弧度
|
atan(1) // 3.14159/4
|
atan2(y, x)
|
计算
y/x
的反正切值,返回弧度
|
atan2(1, 1) // 3.14159/4
|
4. 双曲函数
| 函数 | 功能 | 示例 |
|---|---|---|
sinh(x)
|
计算
x
的双曲正弦
|
sinh(0) // 0
|
cosh(x)
|
计算
x
的双曲余弦
|
cosh(0) // 1
|
tanh(x)
|
计算
x
的双曲正切
|
tanh(1) // 0.7616
|
asinh(x)
|
计算
x
的反双曲正弦
|
asinh(1) // 0.8814
|
acosh(x)
|
计算
x
的反双曲余弦,
x
≥ 1
|
acosh(1) // 0
|
atanh(x)
|
计算
x
的反双曲正切,
x
在 (-1, 1)
|
atanh(0.5) // 0.5493
|
5. 取整和浮点数操作
| 函数 | 功能 | 示例 |
|---|---|---|
ceil(x)
|
返回不小于
x
的最小整数
|
ceil(2.3) // 3
|
floor(x)
|
返回不大于
x
的最大整数
|
floor(2.3) // 2
|
trunc(x)
|
返回去除小数部分的整数值 |
trunc(2.8) // 2
|
round(x)
|
返回四舍五入到最接近的整数 |
round(2.5) // 3
|
lround(x)
|
返回四舍五入到
long
类型
|
lround(2.5) // 3
|
llround(x)
|
返回四舍五入到
long long
类型
|
llround(2.5) // 3
|
nearbyint(x)
|
返回舍入到最接近整数(但不引发浮点异常) |
nearbyint(2.5) // 2
|
rint(x)
|
返回四舍五入到整数,符合当前舍入方式 |
rint(2.5) // 3
|
modf(x, &intpart)
|
将
x
的整数和小数部分分离
|
modf(2.3, &intpart)
|
6. 浮点数检查
| 函数 | 功能 | 示例 |
|---|---|---|
isfinite(x)
|
检查
x
是否为有限值(非无穷大或非 NaN)
|
isfinite(3.0) // true
|
isinf(x)
|
检查
x
是否为无穷大
|
isinf(1.0 / 0.0) // true
|
isnan(x)
|
检查
x
是否为 NaN
|
isnan(0.0 / 0.0) // true
|
isnormal(x)
|
检查
x
是否为正常的非零浮点数
|
isnormal(1.0) // true
|
signbit(x)
|
检查
x
的符号是否为负
|
signbit(-5.3) // true
|
实例
下面是一个使用
<cmath>
的简单示例,展示了如何计算一个数的平方根、正弦值和绝对值。
示例代码
#include <iostream>#include <cmath> // 包含 <cmath> 头文件intmain(){doublenum=9.0;doubleroot=sqrt(num);// 计算平方根doublesinValue=sin(M_PI/2);// 计算正弦值,M_PI 是 π 的近似值doubleabsValue=abs(-5.0);// 计算绝对值std::cout<<"The square root of "<<num<<" is "<<root<<std::endl;std::cout<<"The sine of "<<M_PI/2<<" is "<<sinValue<<std::endl;std::cout<<"The absolute value of -5.0 is "<<absValue<<std::endl;return0;}
输出结果:
The square root of 9 is 3 The sine of 1.570796 is 1 The absolute value of -5 is 5
示例代码
#include <iostream>#include <cmath>intmain(){// 基本数学运算std::cout<<"abs(-5) = "<<abs(-5)<<std::endl;std::cout<<"fmod(5.3, 2) = "<<fmod(5.3,2)<<std::endl;// 指数和对数函数std::cout<<"exp(1) = "<<exp(1)<<std::endl;std::cout<<"log(2.71828) = "<<log(2.71828)<<std::endl;std::cout<<"pow(2, 3) = "<<pow(2,3)<<std::endl;// 三角函数std::cout<<"sin(3.14159 / 2) = "<<sin(3.14159/2)<<std::endl;std::cout<<"cos(3.14159) = "<<cos(3.14159)<<std::endl;// 取整函数std::cout<<"ceil(2.3) = "<<ceil(2.3)<<std::endl;std::cout<<"floor(2.3) = "<<floor(2.3)<<std::endl;// 浮点数检查doublex=1.0/0.0;if(isinf(x)){std::cout<<"x is infinite"<<std::endl;}return0;}
注意事项
-
<cmath>中的函数通常接受float或double类型的参数,并返回相应类型的结果。对于long double类型,你可以使用<cmath>中的函数,但需要在函数名后加上l后缀,例如sqrtl。 -
某些函数,如
pow和log,可以接受整数作为参数,但结果仍然是浮点数。 -
<cmath>中的函数可能会抛出异常,例如当sqrt函数的参数为负数时,会抛出std::domain_error异常。
<cmath>
是 C++ 标准库中一个非常有用的头文件,它提供了许多基本的数学函数,可以帮助开发者在编写程序时进行数学运算。